#ifndef TIMER_H
#define TIMER_H

#include <stdint.h>

// 定时器编号：0=TIM2, 1=TIM3, 2=TIM4, 3=TIM5
#define TIMER_2     0
#define TIMER_3     1
#define TIMER_4     2
#define TIMER_5     3

/**
 * @brief 初始化定时器（设置分频）
 * @param timer_num 定时器编号 (0~3)
 * @param prescaler 预分频值（例如 72 → 72MHz/72 = 1MHz）
 * @param count_up  向上计数（兼容 esp32-hal，实际固定向上）
 * @return          0=成功，-1=失败
 */
int timerBegin(uint8_t timer_num, uint16_t prescaler, uint8_t count_up);

/**
 * @brief  读取指定定时器的当前计数值（CNT寄存器）
 * @param  timer_num 定时器编号 (0:TIM2, 1:TIM3, 2:TIM4, 3:TIM5)
 * @return 当前计数值 (0 ~ 65535)，无效编号返回 0
 */
uint16_t timerRead(uint8_t timer_num);

/**
 * @brief  设置指定定时器的计数值（CNT寄存器）
 * @param  timer_num 定时器编号
 * @param  value 要设置的值 (0 ~ 65535)
 */
void timerWrite(uint8_t timer_num, uint16_t value);

/**
 * @brief 绑定中断回调函数
 * @param timer_num 定时器编号
 * @param callback  回调函数（建议用 IRAM_ATTR）
 */
void timerAttachInterrupt(uint8_t timer_num, void (*callback)(void));

/**
 * @brief 设置定时周期（计数值）
 * @param timer_num   定时器编号
 * @param alarm_value 计数周期（如 1000000 表示 1秒 @1MHz）
 * @param auto_reload 1=自动重载，0=单次模式
 */
void timerAlarmWrite(uint8_t timer_num, uint32_t alarm_value, uint8_t auto_reload);

/**
 * @brief 启动定时器（使能中断）
 * @param timer_num 定时器编号
 */
void timerAlarmEnable(uint8_t timer_num);

/**
 * @brief 停止定时器
 * @param timer_num 定时器编号
 */
void timerStop(uint8_t timer_num);

#endif // TIMER_H
